home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_actor_robotsm.cog < prev    next >
Text File  |  1999-11-15  |  6KB  |  234 lines

  1. # Jones 3D Cog Script
  2. #
  3. # actor_RobotSm.cog
  4. #
  5. # Special case behavior for the spinning robot
  6. #
  7. # [MDR] 
  8. #
  9. # (C) 1999 LucasArts Entertainment Co. All Rights Reserved
  10. # ========================================================================================
  11.  
  12. symbols
  13.  
  14.     message        startup
  15.     message        created
  16.     message        aievent
  17.     message        damaged
  18.     message        killed
  19.     message        callback
  20.  
  21. # *********************** SUBROUTINES **************************
  22.     flex        RobotTakeOff            local
  23.     flex        RobotLand                local
  24.  
  25. # ************************** TEMPLATES *************************
  26.     template    tpl_glow=+robotglow_xsm    local
  27.  
  28. # *********************** MISC LOCAL VARS **********************
  29.     thing        t_sender                local
  30.     thing        t_glow                    local
  31.  
  32.     int            eventType                local
  33.     int            n_damageType            local
  34.     flex        f_userData                local
  35.  
  36.     int            FLAG_SETARMEDMODE        local
  37.     int            FLAG_FIRE                local
  38.  
  39.     vector        vec_pos                    local
  40.  
  41. end
  42.  
  43. # ========================================================================================
  44. code
  45.  
  46. # ........................................................................................
  47. startup:
  48.  
  49.     FLAG_SETARMEDMODE    = 0x20;
  50.     FLAG_FIRE            = 0x40;
  51.  
  52.     return;
  53.  
  54.  
  55. # ........................................................................................
  56. created:
  57.  
  58.     t_sender = GetSenderRef();
  59.  
  60.     SetActorFlags(t_sender, 0x40000);                    # Set AF_IMMOBILE
  61.     SetActorFlags(t_sender, 0x08);                        # Set AF_INVULNERABLE
  62.     AISetMode(t_sender, 0x8000000);                        # Set MODE_ARMOREDSKIN
  63.     AISetMode(t_sender, 0x10000);                        # Set MODE_WANTALLEVENTS
  64.     AISetMode(t_sender, 0x2000000);                        # Set MODE_NOCHASING
  65.  
  66.     SetArmedMode(t_sender, 7);                            # Switch to non-active armed mode
  67.  
  68.     SetThingUserData(t_sender, 0);
  69.  
  70.     return;
  71.  
  72.  
  73. # ........................................................................................
  74. aievent:
  75.  
  76.     eventType    = GetParam(0);
  77.  
  78.     t_sender    = GetSenderRef();
  79.     f_userData    = GetThingUserData(t_sender);
  80.  
  81.     if ( BITTEST(f_userData, FLAG_SETARMEDMODE) )        # If an armed mode change pending, bail
  82.         return;
  83.  
  84.     if ( eventType == 0x40 )                            #---- EVENT_MOVETARGETCHANGED
  85.     {
  86.         if ( AIGetArmedMode(t_sender) == 7 )                # Non-active armed mode?
  87.         {
  88.             call RobotTakeOff;
  89.         }
  90.     }
  91.  
  92.     if ( BITTEST(eventType, 0x80800 ) )                    #---- EVENT_GOAL(UNREACHABLE|REACHED)
  93.     {
  94.         if ( !BITTEST(AIGetMode(t_sender), 0x202) )
  95.         {
  96.             call RobotLand;
  97.         }
  98.     }
  99.  
  100.     if ( eventType == 0x4000 )                            #---- EVENT_FIRE
  101.     {
  102.         StopMode(t_sender, 65, 0);
  103.         f_userData = BITSET(f_userData, FLAG_FIRE);            # Set "shot pending" flag
  104.     }
  105.  
  106.     SetThingUserData(t_sender, f_userData);                    # Record flag settings
  107.  
  108.     return;
  109.  
  110.  
  111. # ........................................................................................
  112. damaged:
  113.  
  114.     t_sender        = GetSenderRef();
  115.     n_damageType    = GetParam(1);
  116.  
  117.     if ( BITTEST(GetActorFlags(t_sender), 0x40000) )
  118.     {
  119.         if ( BITTEST(n_damageType, 0x01) )                    # DAMAGE_IMPACT?
  120.         {
  121.             PlaySoundClass(t_sender, 85);                    # Play ricochet sound
  122.         }
  123.  
  124.         ReturnEx(0);
  125.     }
  126.  
  127.     if ( BITTEST(n_damageType, 0x18) )                        # DAMAGE_(FISTS|WHIP)?
  128.     {
  129.         ReturnEx(0);
  130.     }
  131.  
  132.     return;
  133.  
  134.  
  135. # ........................................................................................
  136. killed:
  137.  
  138.     t_sender    = GetSenderRef();
  139.     t_glow        = GetThingAttachedThing(t_sender, 13);
  140.     if ( t_glow > -1 )
  141.     {
  142.         DestroyThing(t_glow);
  143.     }
  144.  
  145.     return;
  146.  
  147.  
  148. # ........................................................................................
  149. callback:
  150.  
  151.     t_sender    = GetSenderRef();
  152.     f_userData    = GetThingUserData(t_sender);
  153.  
  154.     if ( BITTEST(f_userData, FLAG_FIRE) )
  155.     {
  156.         PlayMode(t_sender, 65, 0);                                # Play fire animation.
  157.         f_userData = BITCLEAR(f_userData, FLAG_FIRE);            # Clear "shot pending" flag
  158.     }
  159.  
  160.     SetThingUserData(t_sender, f_userData);                        # Record flag settings
  161.  
  162.     return;
  163.  
  164.  
  165. # ===================================================================
  166. #    Subroutines
  167. # ===================================================================
  168.  
  169. # ........................................................................................
  170. # Assumes t_sender has been set
  171. # ........................................................................................
  172. RobotTakeOff:
  173.  
  174.     f_userData = GetThingUserData(t_sender);
  175.  
  176.     ClearPhysicsFlags(t_sender, 0x01);                # Clear PF_USEGRAVITY
  177.     ClearActorFlags(t_sender, 0x40000);                # Clear AF_IMMOBILE
  178.     ClearActorFlags(t_sender, 0x08);                # Clear AF_INVULNERABLE
  179.  
  180.     ResetThing(t_sender);
  181.     PlayMode(t_sender, 69, 0);                        # Play the stand to walk anim
  182.     PlaySoundClass(t_sender, 131);                    # Play spin up sound
  183.     SetArmedMode(t_sender, 0);                        # Switch to active armed mode
  184.     PlaySoundClass(t_sender, 123);                    # Play hover sound
  185.  
  186.     vec_pos    = VectorAdd( GetThingPos(t_sender), '0 0 -0.03' );
  187.     t_glow    = CreateThingAtPos(tpl_glow, FindNewSectorFromThing(t_sender, vec_pos), vec_pos, '0 0 0');
  188.     if ( t_glow > -1 )
  189.     {
  190.         AttachThingToThingEx(t_glow, t_sender, 0x08);
  191.     }
  192.  
  193.     SetThingUserData(t_sender, f_userData);
  194.  
  195.     return;
  196.  
  197.  
  198. # ........................................................................................
  199. # Assumes t_sender has been set
  200. # ........................................................................................
  201. RobotLand:
  202.  
  203.     f_userData = GetThingUserData(t_sender);
  204.     f_userData = BITSET(f_userData, FLAG_SETARMEDMODE);
  205.     SetThingUserData(t_sender, f_userData);
  206.  
  207.     StopThing(t_sender);
  208.     ResetThing(t_sender);
  209.     SetArmedMode(t_sender, 7);                        # Switch to non-active armed mode
  210.     StopSoundClass(t_sender, 123);                    # Stop hover sound
  211.     PlaySoundClass(t_sender, 132);                    # Play spin down sound
  212.     PlayMode(t_sender, 70, 0);                        # Play the walk to stand anim
  213.  
  214.     SetPhysicsFlags(t_sender, 0x01);                # Set PF_USEGRAVITY
  215.     SetActorFlags(t_sender, 0x40000);                # Set AF_IMMOBILE
  216.     SetActorFlags(t_sender, 0x08);                    # Set AF_INVULNERABLE
  217.  
  218.     t_glow = GetThingAttachedThing(t_sender, 13);
  219.     if ( t_glow > -1 )
  220.     {
  221.         DestroyThing(t_glow);
  222.     }
  223.  
  224.     f_userData = GetThingUserData(t_sender);
  225.     f_userData = BITCLEAR(f_userData, FLAG_SETARMEDMODE);
  226.     SetThingUserData(t_sender, f_userData);
  227.  
  228.     return;
  229.  
  230.  
  231. end
  232.  
  233.  
  234.